#include "consulta_usuarios.h"
#include "ui_consulta_usuarios.h"
#define ACTIVO "activo"
#define INACTIVO "inactivo"
#define NOMBRE "Nombre"
#define APELLIDO "Apellido"
#define USUARIO "Usuario Nick"
#define DEPARTAMENTO "Departamento"

Consulta_Usuarios::Consulta_Usuarios(QWidget *parent) :
    VentanaConsulta(parent)
{
    indiceBusqueda = 0;
    this->setWindowTitle("Consulta Usuarios");
    modeloConsulta->setTable("usuario");
    modeloConsulta->setRelation(11,QSqlRelation("departamento","id_departamento","nombre_departamento"));
    modeloConsulta->setHeaderData(11,Qt::Horizontal,"Departamento");
    modeloConsulta->setHeaderData(0,Qt::Horizontal,"id_usuario");
    modeloConsulta->setHeaderData(1,Qt::Horizontal,"Cédula");
    modeloConsulta->setHeaderData(2,Qt::Horizontal,"Nombre");
    modeloConsulta->setHeaderData(3,Qt::Horizontal,"Apellido");
    modeloConsulta->setHeaderData(4,Qt::Horizontal,"Cargo");
    modeloConsulta->setHeaderData(5,Qt::Horizontal,"Dirección");
    modeloConsulta->setHeaderData(6,Qt::Horizontal,"Teléfono");
    modeloConsulta->setHeaderData(7,Qt::Horizontal,"Correo");
    modeloConsulta->setHeaderData(8,Qt::Horizontal,"Usuario");
    modeloConsulta->setHeaderData(9,Qt::Horizontal,"pass");
    modeloConsulta->setHeaderData(10,Qt::Horizontal,"passTemp");
    modeloConsulta->setHeaderData(12,Qt::Horizontal,"estado");
    modeloConsulta->select();

    //Se establece el source model para el filtro
    filtro->setSourceModel(modeloConsulta);

    //Se establece el filtro como modelo de la tabla (proxy)
    ui->tableView->setModel(filtro);
    QStringList elementos;
    elementos << NOMBRE << APELLIDO << USUARIO << DEPARTAMENTO;
    ui->comboBuscarPor->addItems(elementos);
    ui->tableView->setModel(filtro);
    ui->tableView->hideColumn(0);
    ui->tableView->hideColumn(1);
    ui->tableView->hideColumn(5);
    ui->tableView->hideColumn(9);
    ui->tableView->hideColumn(10);
    ui->tableView->hideColumn(12);
    ui->textoBusqueda->setPlaceholderText("Nombre");

    filtro->beginDeclareFilter();
    filtro->setFilter(12, QVariant(ACTIVO), Qt::DisplayRole, Qt::MatchExactly);
    filtro->endDeclareFilter();
}

void Consulta_Usuarios::on_registrar_clicked()
{
    RegMod_Usuarios *registrarUsuario = new RegMod_Usuarios();
    registrarUsuario->exec();
    modeloConsulta->select();
    delete registrarUsuario;
}

void Consulta_Usuarios::on_modificar_clicked()
{
    QModelIndexList indexes = obtenerIndicesSeleccionados(0);
    if(indexes.count() == 1)
    {
        QModelIndex index = indexes.at(0).sibling(indexes.at(0).row(), 0);
        int id = ui->tableView->model()->data(index).toInt();

        QDjangoQuerySet<Usuario> usuarios;
        Usuario *usu = usuarios.filter(QDjangoWhere("id_usuario", QDjangoWhere::Equals, id)).at(0);
        RegMod_Usuarios *modificarUsuario = new RegMod_Usuarios(this, usu);
        modificarUsuario->exec();
        modeloConsulta->select();
        delete modificarUsuario;
        delete usu;
    }
    else
    {
        cuadroMensaje("Debe seleccionar un registro de usuario para poder editarlo", "");
    }
}

void Consulta_Usuarios::on_eliminar_clicked()
{
    QModelIndexList indexes = obtenerIndicesSeleccionados(0);
    if(indexes.count() > 0)
    {
        QModelIndex index = indexes.at(0).sibling(indexes.at(0).row(), 0);

        int id = ui->tableView->model()->data(index).toInt();

        QDjangoQuerySet<Usuario> usuarios;
        Usuario *usu = usuarios.filter(QDjangoWhere("id_usuario", QDjangoWhere::Equals, id)).at(0);

        int respuesta = cuadroMensaje("<p align=center><b>Confirmar Cambios</b></p>", "<p align=center>¿Está seguro que desea eliminar el/los registro/s seleccionados?</p>");

        if (respuesta == QMessageBox::Ok)
        {
            usu->setEstado(INACTIVO);
            usu->save();
            delete usu;
            modeloConsulta->select();
        }
    }
    else
    {
        cuadroMensaje("","Debe seleccionar al menos un registro a eliminar");
    }
}

void Consulta_Usuarios::on_textoBusqueda_textChanged(const QString &arg1)
{
    filtro->beginDeclareFilter();
    filtro->setFilter(indiceBusqueda, QVariant(arg1), Qt::DisplayRole, Qt::MatchContains);
    filtro->endDeclareFilter();
}

void Consulta_Usuarios::on_comboBuscarPor_currentTextChanged(const QString &arg1)
{
    if(arg1 == NOMBRE) indiceBusqueda = 2;
    else if(arg1 == APELLIDO) indiceBusqueda = 3;
    else if(arg1 == USUARIO) indiceBusqueda = 8;
    else if(arg1 == DEPARTAMENTO) indiceBusqueda = 11;

     ui->textoBusqueda->setPlaceholderText(arg1);
}

void Consulta_Usuarios::on_refrescarTabla_clicked()
{
    for(int i=0;i<ui->tableView->model()->columnCount()-1;i++){
        filtro->removeFilter(i);
    }
    ui->comboBuscarPor->setCurrentIndex(0);
}

void Consulta_Usuarios::on_checkActivos_toggled(bool checked)
{
    if(checked){
        filtro->beginDeclareFilter();
        filtro->setFilter(12, QVariant(ACTIVO), Qt::DisplayRole, Qt::MatchExactly);
        filtro->endDeclareFilter();
    }
    else filtro->removeFilter(12);
}

void Consulta_Usuarios::on_tableView_doubleClicked()
{
    Consulta_Usuarios::on_modificar_clicked();
}



